package com.dlyk.service.impl;

import com.dlyk.constant.Constants;
import com.dlyk.mapper.ProductMapper;
import com.dlyk.model.Product;
import com.dlyk.model.User;
import com.dlyk.query.BaseQuery;
import com.dlyk.query.ProductQuery;
import com.dlyk.service.ProductService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import jakarta.annotation.Resource;
import org.springframework.beans.BeanUtils;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;

@Service
public class ProductServiceImpl implements ProductService {

    @Resource
    private ProductMapper productMapper;

    /**
     * 查询所有在售产品
     */
    @Override
    public List<Product> getAllOnSaleProduct() {
        return productMapper.selectAllOnSaleProduct();
    }

    /**
     * 查询所有产品
     */
    @Override
    public PageInfo<Product> getProductListByPage(Integer current) {

        // 1、设置PageHelper
        PageHelper.startPage(current, Constants.PAGE_SIZE);

        // 2、查询
        List<Product> productList = productMapper.selectProductListByPage();

        // 3、封装分页数据到PageInfo
        PageInfo<Product> productPageInfo = new PageInfo<>(productList);

        return productPageInfo;
    }

    /**
     * 录入产品
     */
    @Override
    public int addProduct(ProductQuery productQuery) {

        Product product = new Product();

        // 使用BeanUtils工具将前端传递的参数转成Product类型
        BeanUtils.copyProperties(productQuery, product);

        // 获取创建者（当前登录用户）
        User loginUser = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal();

        // 设置创建者
        product.setCreateBy(loginUser.getId());
        // 设置创建时间
        product.setCreateTime(new Date());

        // 设置产品状态（录入的产品都是在售）
        product.setState(0);

        return productMapper.insertSelective(product);
    }

    /**
     * 编辑产品
     */
    @Override
    public int editProduct(ProductQuery productQuery) {

        Product product = new Product();

        // 使用BeanUtils工具将前端传递的参数转成Product类型
        BeanUtils.copyProperties(productQuery, product);

        // 获取编辑者（当前登录用户）
        User loginUser = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal();

        // 设置编辑者
        product.setEditBy(loginUser.getId());
        // 设置创建时间
        product.setEditTime(new Date());

        return productMapper.updateByPrimaryKeySelective(product);
    }

}

